package cn.lyjuan.archetypes.bms.web.mapper;

import cn.lyjuan.archetypes.bms.web.bean.dto.PrivilegeRoleBean;
import cn.lyjuan.archetypes.bms.web.bean.dto.PrivilegeActionBean;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * Created by chad on 2016/9/10.
 */
public interface IWebPrivilegeMapper
{
    /**
     * 删除不存在于{@code needInRoles}中，但用户{@code manageid}已有关联关系存在的角色
     * @param manageid      用户编号
     * @param needInRoles   需要的角色，可空
     * @return
     */
    int deleteNotInRoles(@Param("manageid") int manageid, @Param("needInRoles") Integer[] needInRoles);

    /**
     * 新增存在于{@code needExistRoles}中，但用户{@code manageid}没有关联关系存在的角色
     * @param createby          创建者编号
     * @param manageid          用户编号
     * @param needExistRoles    需要的角色，不可空
     * @return
     */
    int insertNotExistRoles(@Param("createby") String createby, @Param("manageid") int manageid, @Param("needExistRoles") Integer[] needExistRoles);

    /**
     * 删除不存在于{@code needInActions}中，但用户{@code roleid}已有关联关系存在的请求
     * @param roleid            角色编号
     * @param needInActions     需要的请求，可为空
     * @return
     */
    int deleteNotInAction(@Param("roleid") int roleid, @Param("needInActions") Integer[] needInActions);

    /**
     * 新增存在于{@code needExistActions}中，但用户{@code roleid}没有关联关系存在的请求
     * @param createby              创建者账号
     * @param roleid                角色编号
     * @param needExistActions      需要的请求，不可为空
     * @return
     */
    int insertNotExistActions(@Param("createby") String createby, @Param("roleid") int roleid, @Param("needExistActions") Integer[] needExistActions);


    /**
     * 管理员查看角色权限
     * @param roleid
     * @return
     */
    List<PrivilegeActionBean> selectActionForRoleByAdmin(@Param("roleid") Integer roleid, @Param("params")Map<String, String> params);

    /**
     * 查询用户权限下角色拥有的权限
     * @param manageid
     * @param roleid
     * @return
     */
    List<PrivilegeActionBean> selectActionForRoleByManage(@Param("manageid") Integer manageid, @Param("roleid") Integer roleid);

    /**
     * 管理员查看用户角色权限
     * @param userid
     * @return
     */
    List<PrivilegeRoleBean> selectRoleForUserByAdmin(@Param("userid") Integer userid, @Param("params")Map<String, String> params);

    /**
     * 查询用户权限下用户拥有的角色
     * @param manageid
     * @param userid
     * @return
     */
    List<PrivilegeRoleBean> selectRoleForUserByManage(@Param("manageid") Integer manageid, @Param("userid") Integer userid);

    /**
     * 查询用户能操作的角色ID
     * @param manageid
     * @return
     */
    Integer[] selectRoleIdsByManage(@Param("manageid") Integer manageid);

    /**
     * 查询用户有权限的操作
     * @param manageid
     * @return
     */
    Integer[] selectActionIdsByManage(@Param("manageid") Integer manageid);

    /**
     * 关联用户角色
     * @param createby
     * @param manageid
     * @param ids
     */
    void insertManageRoleRelated(@Param("createby")String createby, @Param("manageid") Integer manageid,
                                 @Param("ids") Integer[] ids);

    /**
     * 取消关联用户角色
     * @param manageid
     * @param ids
     */
    void deleteManageRoleRelated(@Param("manageid") Integer manageid, @Param("ids") Integer[] ids);

    /**
     * 关联角色权限
     * @param createby
     * @param roleid
     * @param ids
     */
    void insertRoleActionRelated(@Param("createby")String createby, @Param("roleid") Integer roleid,
                                 @Param("ids") Integer[] ids);

    /**
     * 取消关联角色权限
     * @param roleid
     * @param ids
     */
    void deleteRoleActionRelated(@Param("roleid") Integer roleid, @Param("ids") Integer[] ids);
}
